<?php
/**
 * 
 * Controller setupseguimiento
 * @author
 * 
 */
class SetupSeguimiento extends Controller
{
	public function __construct()
	{
	    parent::Controller();
	    $this->load->library(array('chcalendario','ChFopen','email'));
	    $this->load->model(array('msetupseguimiento', 'metapas', 'mscript', 'mcompania', 'mprocesos', 'metapas', 'usuarios','mseguimientosend', 'mdetallesend', 'mfrom'));
	}
	
	public function index()
	{
	    $this->load->view('main', array('content_page' => 'setupseguimiento_list','menutop' => 0));	
	}
	
	public function data()
	{
	    $page = $this->input->post('page') ? $this->input->post('page') : 1; // Pagina Actual o 1 por default
		$sortname = $this->input->post('sidx') ? $this->input->post('sidx') : 'IdEtapa'; // Columna para el order by
		$sortorder = $this->input->post('sord') ? $this->input->post('sord') : 'desc'; // Orden (asc|desc)
		$limit = $this->input->post('rows') ? $this->input->post('rows') : 30;
		$start = $limit * $page - $limit;
		if($start < 0) $start = 0;
  
		      header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
		      header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" );
		      header("Cache-Control: no-cache, must-revalidate" );
		      header("Pragma: no-cache" );

        $records = $this->msetupseguimiento->loadObjeto($start, $limit, $sortname, $sortorder);

		$totalRecords = count($records);

		$totalPages = ceil($totalRecords/$limit);
		  if ($page > $totalPages) $page = $totalPages;

		$json_output = array(
		         'page'		=> $page,
		         'total'	=> $totalPages,
		         'records'	=> $totalRecords,
		         'rows'		=> array());

		if($records != false){
			 foreach($records as $objetos){
			 	
			 	     $etapa = $this->metapas->LoadEtapaById($objetos->getIdEtapa());
			 	     $script = $this->mscript->LoadRegistroById($objetos->getIdScript());
				     
			 	     $json_output['rows'][] = array(
				          'Id'           => $objetos->getId(),
				          'Etapa'        => $etapa->GetNombre(),
				          'Script'       => $script->getTitleScript(),
				          'Tipo'         => $objetos->getTipo());
			 }
	    }
		 echo json_encode($json_output);
   }
   
   public function add()
   {
   	   $objetoEtapa = $this->metapas->LoadEtapas();
   	   $objetoScript = $this->mscript->loadScript();
       $this->load->view('main', array('content_page'    => 'setupseguimiento_add',
                                       'menutop'         => 0,
                                       'objetoEtapa'     => $objetoEtapa,
                                       'objetoScript'    => $objetoScript));	
   }
   
   public function edit($id)
   {
   	   $objetoSSeguimiento = $this->msetupseguimiento->LoadObjetoById($id);  
   	
       $objetoEtapa = $this->metapas->LoadEtapas();
   	   $objetoScript = $this->mscript->loadScript();
       $this->load->view('main', array('content_page'        => 'setupseguimiento_edit',
                                       'menutop'             => 0,
                                       'objetoEtapa'         => $objetoEtapa,
                                       'objetoScript'        => $objetoScript,
                                       'objetoSSeguimiento'  => $objetoSSeguimiento));
   }
   
   public function delete()
   {
      $id = $this->input->post('delete_rows');
        
       if ($id != false){
          $this->msetupseguimiento->deleteReguistro($id);	
       }
      
   }
   
   public function save()
   {
       $objetoData = array("IdEtapa"    => $this->input->post('etapa'),
                           "IdScript"   => $this->input->post('script'),
                           "Tipo"       => $this->input->post('tipo'));
       
         if ($this->input->post('id') == false) {
         	  if ($this->msetupseguimiento->addReguistro($objetoData) == true){
         	        $this->session->set_flashdata('error_title', 'Se creo un registro');
         	        $this->session->set_flashdata('error', 2);
         	  }else{
         	        $this->session->set_flashdata('error_title', 'Ocurrio un error');
         	        $this->session->set_flashdata('error', 1);
         	  }
         }else{
              if ($this->msetupseguimiento->editReguistro($objetoData, $this->input->post('id')) == true){
         	        $this->session->set_flashdata('error_title', 'Se modifico un registro');
         	        $this->session->set_flashdata('error', 2);
         	  }else{
         	        $this->session->set_flashdata('error_title', 'Ocurrio un error');
         	        $this->session->set_flashdata('error', 1);
         	  }         
         }
         
        redirect('setupseguimiento'); 
   }
   
  /**
    * 
    * @param String $arrayData
    */
   
   public function sendSms($arrayData)
   {   	  
   	   $this->_send($arrayData, "SMS");    
   }
   
   public function sendMail($arrayData)
   {   
   	   $this->_send($arrayData, "MAIL");    
   }

   /**
    * 
    * @param String $arrayData
    * @param String $tipo Value SMS | MAIL
    */
   
   private function _send($arrayData, $tipo)
   {
         $arrayData = explode("-",$arrayData);
   	     $idSeguimientoSend = 0;
   	     $contadorSend = 0; 
   	     
   	     $dataSeguimientoSend = array("Id_Usuario"      => $this->session->userdata('LOGGED_USR_ID'),
   	                                  "Fecha"           => date("Y-m-d")." 00:00:00",
   	                                  "Type"            => $tipo,
   	                                  "Session"         => 1);
   	   
         if ($this->mseguimientosend->addReguistro($dataSeguimientoSend) == true){
                 $dataWhere = array("Id_Usuario" => $this->session->userdata('LOGGED_USR_ID'),
              	                     "Type"       => $tipo,
              	                     "Session"    => 1);
              	          
              	  $objeto = $this->mseguimientosend->loadRegistroByWhere($dataWhere);      
                  $idSeguimientoSend = $objeto[0]->getIdSeguimiento();
         }
         
         foreach ($arrayData as $k){
   	   	    	  
   	          $objetoCompany = $this->mcompania->LoadCompaniaById($k);
   	          
   	          $idLastproseso = $this->mprocesos->loadLastProceso($k);
		      $lastproseso = $this->mprocesos->loadProcesoById($idLastproseso);	
		      
		      $modeloEtapa = $this->metapas->LoadEtapaById($lastproseso->getIdEtapa());
		      
		      if ($tipo == "SMS") {
		      	  $idScript = $modeloEtapa->getIdScriptSms();
		      }else {
		          $idScript = $modeloEtapa->getIdScriptMail();
		      }
		      
		      $objetoScript = $this->mscript->LoadRegistroById($idScript);
		      $objetoUser = $this->usuarios->LoadUsuarioById($this->session->userdata('LOGGED_USR_ID'));	

		      /**
		       * @var $bodyReal String
		       * Retorna el Cuerpo del mensage Ya Filtrado Con todo Por Haora solo es balido para los SMS
		       * 
		       */
		      $bodyReal = $this->bodyMensage($objetoCompany->getNombreCompania(), $objetoCompany->getContacto(), false, $objetoUser->getNombreUsuario(), $objetoUser->getEtx(), $objetoScript->getBodyScript());
		    
		      
		      /** Esta parte es solo valida para los SMS Typo */
		      
		      if ($tipo == "SMS") {
		      	       $expTel = array('/\ /', '/\-/','/\//','/\./','/\,/','/([A-Z])/','/([a-z])/');
      	               $telefono1 = trim(preg_replace($expTel,"", $objetoCompany->getTelefono1Compania()));
      	               $telefono2 = trim(preg_replace($expTel,"", $objetoCompany->getTelefono2Compania()));
		    
      	               $contadorSend += $this->_sendSms($objetoCompany->getNombreCompania(), $objetoCompany->getContacto(), $telefono1, $idSeguimientoSend, $bodyReal, $lastproseso->getIdEtapa());
      	               $contadorSend += $this->_sendSms($objetoCompany->getNombreCompania(), $objetoCompany->getContacto(), $telefono2, $idSeguimientoSend, $bodyReal, $lastproseso->getIdEtapa()); 

      	               $descripcionProceso = "SMS - ".$bodyReal;
		      }
		      
		      if ($tipo == "MAIL"){
		           $contadorSend += $this->_sendMail($objetoCompany->getEmailCompania(), $objetoCompany->getNombreCompania(), $bodyReal, $lastproseso->getIdEtapa(), $objetoCompany->getContacto(), $idSeguimientoSend, $objetoScript->getSubjectScript());
		           $descripcionProceso = "Envio automatico de MAIL";
		      }
		      
  	      
      	      $dias = $this->chcalendario->calcularDias($lastproseso->getFechaSys());
      	    
      	      $arrayDataProsesoUpdate = array("dias"   => intval($dias),
      	                                      "Fechas" => date("Y-m-d H:i:s"));
      	    
      	      $this->mprocesos->upDateProceso($lastproseso->getIdProceso(), $arrayDataProsesoUpdate);
      	    
      	      $arrayDataProseso = array("IdEtapa"             => $lastproseso->getIdEtapa(),
      	                                "IdEstatus"           => $lastproseso->getIdEstatus(),
      	                                "DescripcionProceso"  => $descripcionProceso,
      	                                "FechaProceso"        => date("Y-m-d H:i:s"),
      	                                "FechaSysProceso"     => date("Y-m-d H:i:s"),
      	                                "IdResponsable"       => $lastproseso->getIdResponsable(),
      	                                "IdUsuario"           => $this->session->userdata('LOGGED_USR_ID'),
      	                                "IdCompania"          => $k,
      	                                "Comentario"          => $descripcionProceso, 
      	                                "dias"                => 0,
      	                                "Fechas"              => "0000-00-00 00:00:00",
      	      							"IdTipoSeguimiento"	  => 3);
      	    
      	      $this->mprocesos->procesoAdd($arrayDataProseso);

   	   }
   	   
   	   $this->mseguimientosend->upDateRegistro(array("CantidadSegimiento" => $contadorSend), $idSeguimientoSend);
   	   
   	    if ($tipo == "SMS"){
   	         chmod ("public/sms/sms_data5.txt", 0777); 	    
   	    }
   	   
   	   
   	   $this->session->set_flashdata('error', 2);
   	   $this->session->set_flashdata('status_message', 'Seguimiento enviado correctamente');
   	   redirect('main_tran');
   }
   
   /**
    * 
    * @param String $referencia
    * @param String $contacto
    * @param String $telefono
    * @param Int $idSeguimiento
    * @param String $bodyReal
    * 
    * void
    */
   
   private function _sendSms($referencia, $contacto, $telefono, $idSeguimiento, $bodyReal, $etapa)
   {
        if (strlen($telefono) > 7){

        	    $telefono = substr($telefono, 0, 10);
        	
      	    	$arrayDetalleSend = array("Id_Etapa"       => $etapa,
      	    	                          "Referencia"     => $referencia,
      	    	                          "Contacto"       => $contacto,
      	    	                          "telefono"       => $telefono,
      	    	                          "Id_Seguimiento" => $idSeguimiento);
      	    	
      	    	$this->mdetallesend->addReguistro($arrayDetalleSend);
      	    	
      	        $this->chfopen->generalCsv($telefono, $bodyReal);
      	        
      	        return 1;
        }
          
        return 0;
    }
    
    private function _sendMail($mail, $referencia, $bodyMensage, $etapa, $contacto, $idSeguimiento, $subjectScript)
    {    
    	
    	if (strlen($mail) > 5) {
    		  
    		   /** $from 1  es igual a info@company24h.com */
               $from = $this->mfrom->LoadRegistroById(1);
 
               $this->email->from($from->getBody(), $from->getTitle());
               $this->email->to($mail);
               $this->email->set_mailtype('html');
               $this->email->subject($subjectScript.'-'.$referencia);
               $this->email->message($bodyMensage);

               $this->email->send();
          
               $arrayDetalleSend = array("Id_Etapa"       => $etapa,
      	    	                         "Referencia"     => $referencia,
      	    	                         "Contacto"       => $contacto,
      	    	                         "telefono"       => $mail,
      	    	                         "Id_Seguimiento" => $idSeguimiento);
      	    	
      	       $this->mdetallesend->addReguistro($arrayDetalleSend);
      	       
      	       return 1;
    	}
    	
    	   return 0;
    
    }
   
    public function deleteFile()
    {
      @unlink("public/sms/sms_data5.txt");  
    }
   
   /** 
    * @param string $referencia
    * @param string $conctato
    * @param string $servicio
    * @param string $usuario
    * @param string $ext
    * @param string $body
    *
    */
   
   private function bodyMensage($referencia = false, $conctato = false, $servicio = false, $usuario = false, $ext = false, $body)
   {
   	      if($referencia != false)
            $body = trim(preg_replace(array('/\XXXREFERENCIA/'), $referencia, $body));

          if ($conctato != false)  
            $body = preg_replace(array('/\XXXCONTACTO/'), $conctato, $body);
            
          if ($servicio != false)  
            $body = preg_replace(array('/\XXXSERVICIO/'), $servicio, $body);
            
          if ($usuario != false)  
            $body = preg_replace(array('/\XXXUSUARIO/'), $usuario, $body);
            
          if ($ext != false)  
            $body = preg_replace(array('/\XXXEXT/'), $ext, $body); 

           return $body;  
   } 
}